package com.cy.pj.module.controller;


import com.cy.pj.module.pojo.ResponseResult;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/*@ResponseBody
表示不再将响应结果理解为view
并将响应结果转为json格式（前提是必须转换为json）
 */
@Controller
public class JsonController {

    @RequestMapping("/doPesponseJsonString")
    @ResponseBody
    public void doPesponseJsonString(HttpServletResponse response) throws IOException {
        ResponseResult result = new ResponseResult();
        result.setCode(300);
        result.setMassage("ok");
//        构建jackson中的ObjectMapper对象，基于此对象将pojo对象转换为json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonstr = objectMapper.writeValueAsString(result);
//        获取输出流对象
        PrintWriter out=response.getWriter();
//        基于流对象将json串写道客户端
        out.println(jsonstr);
    }
    @RequestMapping("/doPrintJsonString")
    @ResponseBody
    public String doPrintJsonString(){
        String jsonstr="{code:200,message:\"ok\"}";
        return jsonstr;
    }

    @RequestMapping("/doConvertMapToJson")
    @ResponseBody
    public List<Map<String,Object>> doConvertMapToJson(){
        List<Map<String,Object>> list=new ArrayList<>();
        Map<String,Object> map=new HashMap<>();
        map.put("name","tony");
        map.put("state", true);
        list.add(map);
        map=new HashMap<>();
        map.put("name","Jason");
        map.put("state", true);
        list.add(map);
        return list;

    }

    @RequestMapping("/doConvertResponseToJson")
    @ResponseBody
    public ResponseResult doConvertResponseToJson() {
        ResponseResult result = new ResponseResult();
        result.setCode(200);
        result.setMassage("ok");
        return result;//==>{"code":200,"massage":"ok"}
//        当此对象在返回对象时，springweb模块会调用jackson api，将返回值转换为json格式字符
//        底层转换原理分析
//        基于pojo对象的get方法进行字符串的拼接
//        pojo中的get方法中，get单词后面的名字作为key（首字母小写），值为get方法的返回值
    }
}